LinuC-2 - 202試験 - 2.12:システムのセキュリティ - 2.12.1 iptables や firewalld によるパケットフィルタリング

Last Update : August 23 2022 19:00:29

     

a. iptablesの設定

iptablesは、Linuxに実装されたパケットフィルタリングおよびネットワークアドレス変換 (NAT) 機能であるNetfilter(複数のNetfilterモジュールとして実装されている)の設定を操作するコマンドのこと。
Netfilterは、いわゆるファイアウォールやルータとしての役割を果たします。IPv4 用の実装が iptables で、IPv6 用の実装が ip6tables です。
iptables と ip6tables は Linux カーネルの IPv4/IPv6 パケットフィルタルールのテーブルの設定・管理・検査に使用されます。

このINPUT、OUTPUT、FORWARDという3つの経路に対して、それぞれ通過させるパケットのルールを設定します。この3つの経路を「チェイン」と呼びます。
チェインには、これら以外に、PREROUTING,POSTROUTINGがあります。それ以外にユーザー定義のチェインを加えることもできます。

● チェイン
  • INPUT・・・コンピュータに入ってくるパケットに対して適用
    受信するパケットが適切かをチェックします。受信すべきパケットはローカルプロセス(Linux上のプロセス)に配送し、ルールに合致しないパケットは破棄します。
  • OUTPUT・・・コンピュータから出ていくパケットに対して適用
    送信するパケットが適切かをチェックします。送信すべきパケットはネットワークデバイスを経由して外部へ送信し、ルールに合致しないパケットは破棄します。
  • FORWARD・・・あるネットワークインターフェイスから別のネットワークインターフェイスへ中継されるパケットに対して適用
    別のサーバへ転送すると指定されたパケットを受信すると、FORWARDのルールを適用して処理します。転送すべきパケットはネットワークデバイスを経由して別のサーバなどに転送され、ルールに合致しないパケットは破棄します。
  • PREROUTING・・・ルーティング前に適用(NAT等)
  • POSTROUTING・・・ルーティング後に適用(NAT等)

基本ポリシー
  • Chain INPUT (policy DROP)
  • Chain FORWARD (policy DROP)
  • Chain OUTPUT (policy ACCEPT)

これらはそれぞれ基本ポリシーです。どのルールにも当てはまらない場合、これらが適用されます。 policy DROPとなっているのは他のルールが指定されていない場合には、すべて拒否するという意味です。ACCEPTとしてある場合、全て許可します。
複数の異なるテーブルを定義できます。 各テーブルには数個の組み込みチェインがあり、 さらにユーザー定義のチェインを加えることもできます。
各チェインは、パケット群にマッチするルールのリストです。 各ルールはマッチしたパケットに対する処理を規定します。 パケットに対する処理は「ターゲット」と呼ばれ、 同じテーブル内のユーザー定義チェインにジャンプすることもできます。


【 ターゲット 】

ファイアウォールのルールでは、 パケットのマッチ条件とターゲットを指定します。 パケットがマッチしない場合、 チェイン内の次に設定されているルールが評価される。 パケットがマッチした場合、 ターゲットの値によって以下のルールが指定されます。 ターゲットの値には、 ユーザー定義チェインの名前、 iptables-extensions(8) に説明があるターゲットのいずれか、 もしくは特別な値 ACCEPT, DROP, RETURN のいずれかを指定します。

  • ACCEPT はパケット通過
  • DROP はパケット廃棄
  • RETURN は、このチェインを辿るのを中止して、 前の (呼び出し元) チェインの次のルールから再開する

組み込みチェインの最後に到達した場合、 または組み込みチェインでターゲット RETURN を持つルールにマッチした場合、 パケットをどのように処理するかは、そのチェインのポリシーで指定されたターゲットにより決まります。


【 テーブル 】

現在のところ 5 つの独立なテーブルが存在する (ある時点でどのテーブルが存在するかは、 カーネルの設定やどういったモジュールが存在するかに依存する)。
-t, --table テーブル
このコマンドで操作するパケットマッチングテーブルを指定する。 カーネルで自動モジュールローディングが有効になっている場合、 そのテーブルで必要となるモジュールがまだロードされていなければ、 ロードされる。 以下のテーブルがある。

filter:
(-t オプションでテーブルの指定をしない場合は) このテーブルがデフォルトとなる。 このテーブルには、 INPUT (ローカルマシンのソケット宛のパケットに対するチェイン)、 FORWARD (マシンを経由して転送されるパケットに対するチェイン)、 OUTPUT (ローカルマシンで生成されたパケットに対するチェイン) という組み込みチェインがある。
nat:
NAT(Network Address Translation)テーブルは、パケットの中身を書き換えることが可能です。
このテーブルは新しい接続を開くパケットの場合に参照される。 PREROUTING (パケットが入ってきた場合、すぐにそのパケットを変換するためのチェイン。ルーティング前に適用させる場合。)、 OUTPUT (ローカルで生成されたパケットをルーティングの前に変換するためのチェイン。出ていくパケットに対して適用)、 POSTROUTING (パケットが出て行くときに変換するためのチェイン) という 3 つの組み込みチェインがある。 IPv6 NAT サポートはカーネル 3.7 以降で利用できる。
mangle:
mangleテーブルはパケットのIPヘッダの中で定義されているTOS(Type Of Service)フィールドを書き換えることが可能です。
このテーブルは特別なパケット変換に使われる。 カーネル 2.4.17 までは、組み込みチェインは PREROUTING (パケットが入ってきた場合、 すぐにそのパケットを変換するためのチェイン)、 OUTPUT (ローカルで生成されたパケットを ルーティングの前に変換するためのチェイン) の 2 つであった。 カーネル 2.4.18 からは、これらに加えて INPUT (マシン自体に入ってくるパケットに対するチェイン)、 FORWARD (マシンを経由するパケットに対するチェイン)、 POSTROUTING (パケットが出て行くときに変換するためのチェイン。ルーティング後に適用) の 3 つの組み込みチェインもサポートされている。
raw:
このテーブルは、NOTRACK ターゲットとの組み合わせで使用され、接続追跡 (connection tracking) の対象外とする通信を設定するのに使われる。このテーブルは netfilter フックに優先度高で登録されているので、 ip_conntrack や他の IP テーブルよりも前に呼ばれる。 このテーブルでは、 PREROUTING (任意のネットワークインタフェースから到着するパケットに対するチェイン)、 OUTPUT (ローカルプロセスが生成したパケットに対するチェイン) の 2 つの組み込みチェインが提供されている。
security:
このテーブルは、強制アクセス制御 (Mandatory Access Control; MAC) のネットワークルール用に使用される。 例えば、 SECMARK や CONNSECMARK ターゲットにより有効にされるルールなどである。 強制アクセス制御は、 SELinux などの Linux セキュリティモジュールにより実装されている。 セキュリティテーブルは filter テーブルの後に呼ばれる。 これにより、 強制アクセス制御のルールよりも前に、 filter テーブルの任意アクセス制御 (Discretionary Access Control; DAC) のルールを適用することができる。 このテーブルでは、 INPUT (マシン自体に入ってくるパケットに対するチェイン)、 OUTPUT (ローカルマシンで生成されたパケットに対してルーティング前に変更を行うためのチェイン)、 FORWARD (マシンを経由して転送されるパケットに対してルーティング前に変更を行うためのチェイン) の 3 つの組み込みチェインが提供されている。

● iptables コマンド構文
  iptables [オプション] チェーン [パラメータ] [ターゲット]

● iptables コマンドオプション
 -A 指定チェインの最後に新しいルールを追加する
 -D 指定チェインから1つ以上のルールを削除する
 -P 指定チェインのポリシーを指定したターゲットに設定する
 -L 現在の crontab ファイルを削除する。(全ての設定が削除される)
 -N 新しいユーザー定義チェインを作成する
 -X 指定したユーザー定義チェインを削除する。(全ての設定が削除される)
 -I ルール番号を指定してルールを挿入する
 -F 指定されたチェーンの全ての設定を削除する

● チェーン
INPUT 自ホストに入ってくるパケット
OUTPUT ローカルマシンで生成されたパケット
FORWARD 自ホストを経由するパケット
PREROUTING 入ってきたパケットを変換
POSTROUTING 出ていくパケットを変換

● パラメータ
-p プロトコル プロトコル(tcp、udp、icmp、all)を指定
-s IPアドレス[/mask] 送信元のアドレス。IPアドレスorホスト名を記述
-d IPアドレス[/mask] 送信先のアドレス。IPアドレスorホスト名を記述
--sport ポート番号 送信元のアドレス。IPアドレスorホスト名を記述
-dport ポート番号 送信先のアドレス。IPアドレスorホスト名を記述
-i インターフェイス名 パケットが入ってくるインターフェイスを指定
-o インターフェイス名 パケットが出ていくインターフェイスを指定
-j ターゲット 条件に合ったときのアクションを指定
-t テーブル テーブルを指定
-m state --state パケットの状態を条件として指定。stateは、 NEW、ESTABLISHED、RELATED、INVALIDが指定できる
! -p、-s、-dなどで、条件を反転(~以外となる)
--to IPアドレス:ポート番号 宛先を指定

● ターゲット
ACCEPT パケットの通過を許可
DROP パケットを破棄
MASQUERADE 送信元IPアドレスとポート番号の変換
SNAT 送信元のIPアドレスの変換
DNAT 送信先のIPアドレスの変換
LOG ログを取る
REJECT パケットを拒否し、ICMPメッセージを返信(送信元に通知)
REDIRECT 特定ポートにリダイレクト

b. firewalld


c. ufw


z. 出題範囲概要

概要 :
  • IPパケットを転送したり、ネットワークアドレス変換(NATやIPマスカレード)を実行するようシステムを設定し、ネットワークを保護することができる。これには、ポートリダイレクトの設定、フィルタルールの管理、攻撃の回避も含まれる。

詳細 :
  • iptables および ip6tables のツール
    iptables, ip6tables
  • IPパケットの転送
    /proc/sys/net/ipv4/, /proc/sys/net/ipv6/
  • ルーティングテーブルを管理するためのツール
  • ポートリダイレクト
  • 発信元や宛先のプロトコルやポート、アドレスに基づいて、IP パケットの受入と拒否を行うフィルタおよびルールの表示と保存
    /etc/services
  • フィルタ設定の保存および再読込
    iptables-save, iptables-restore
  • firewalld で設定の確認と変更ができる。
    firewalld, firewall-cmd
  • ufw で設定の確認と変更ができる。
    ufw

  [ 例題 ] 


         

    www.it-shikaku.jp